ソフトウェアアーキテクチャの基礎輪読会 4章
日付:2023/11/7
章:4章 アーキテクチャ特性
調査者:naoya.icon
章のまとめ
監査容易性
パフォーマンス
セキュリティ
要件
データ
合法性
スケーラビリティ
コーディング、設計 vs アーキテクティング
アーキテクチャ特性を定義すること
(機能)要件とは
アプリケーションが何をするべきか明らかにすること
ソフトウェアの成功に必要なアーキテクチャを決める活動
〇〇アーキテクチャの実践!とかではなく、要件定義や開発運用、品質特性や品質保証といった広義の設計と開発に関わる活動を指している
参考になりそうな記事
必要なアーキテクチャ特性を選び取ることが重要
アーキテクチャ特性
アプリケーションが成功するために必要な運用と設計の基準を明らかにすること
問題領域とは独立した、システムの重要な側面
アーキテクチャ特性の3つの基準は相互作用している
トレードオフになっている
具体例)セキュリティを向上させたい場合、パフォーマンスにマイナスの影響を及ぼす場合が多い
理由→実行時の暗号化やシークレット情報の隠蔽のための間接参照をはじめとする、パフォーマンスの低下要因となるさまざまな作業をより多く行う必要がある
3つの基準
ドメインに依らない、設計に関する考慮事項を明らかにするもの
例
用件の実装方法や判断基準
アプリケーションに対するパフォーマンス
技術負債を防ぐこと
設計の構造的な側面に影響を与えるもの
特別な設計をしなければならない場合に、それはアーキテクチャ特性に引き上げられる
例)
アプリケーションの成功に不可欠な重要なもの
アプリケーションにとって必要な一握りのアーキテクチャ特性を選び取るべき
理由→設計が複雑になるので、可能な限り大量のアーキテクチャ特性をサポートするべきではない
以下にアーキテクチャ特性のリストを記載するが、リストが完全になることはない。
アーキテクチャ特性の運用特性
可用性
システムがどれくらいの期間利用できるか
継続性
障害復旧能力
パフォーマンス
ストレステスト、ピーク分析、使われる機能の使用頻度、必要となる容量、応答時間の分析
回復性
処理の持続性用件
信頼性・安全性
特定の条件下で、特定の間、システムが機能する度合い
システムがフェイルセーフである必要があるか、人命に影響数量なクリティカルなものであるかを評価する
信頼性には以下の項目が含まれる
成熟度
通常の運用におけるソフトウェアが信頼性要件を満たしているか
可用性
ソフトウェアが動作し、アクセス可能であるか
耐障害性
ハードウェアまたはソフトウェアに障害が発生した場合にソフトウェアが期待通り動作するか
回復性
ソフトウェアが障害から回復し、影響を受けたデータを回復し、システムが望ましい状態を再構築できるか
堅牢性
実行時にインターネット接続が切れた場合や、停電やハードウェア障害が発生した場合にエラーや境界条件を処理できるか
スケーラビリティ
ユーザー数やリクエスト数が増えてもシステムが動作する能力
アーキテクチャの構造特性
すぐれたモジュール性、制御されたコンポーネント間の結合度、読みやすいコードなど、内部的な品質評価
構造容易性
エンドユーザーがソフトウェアの設定を簡単に変更できること
使い勝手の良いインターフェース
拡張性
新しい機能をプラグインで追加可能にすることをどれだけ重視、考慮しているか
インストール容易性
必要なプラットフォームへのインストールのしやすさ
活用性・再利用性
複数の製品で共通のコンポーネントを利用できること
ローカライゼーション
データフィールドの入力画面や問い合わせ画面、多言語対応しているか
メンテナンス容易性
変更の適用やシステムの拡張のしやすさ
可搬性
システムが複数のプラットフォームで動作する必要があるか
あるハードウェア、ソフトウェア、またはその他の運用環境や使用環境から、システム、製品、コンポーネントを別の環境に移行できる程度
以下の特性が含まれる
適応可能性
開発者が効果的かつ効率的に、異なる、または進化したハードウェアやソフトウェア、その他の運用環境や使用環境にソフトウェアを適応させられるか
インストール可能性
ソフトウェアを指定された環境にインストールおよび/またはアンインストールできるか
置換可能性
開発者がどれだけ簡単に機能を他のソフトウェアに置き換えられるか
アップグレード容易性
サーバーやクライアント上で旧バージョンから新バージョンへのアップグレードが簡単、迅速に行えるか
アーキテクチャの横断的特性
アクセシビリティ
何らかの障害を持つユーザーを含めて、全てのユーザーのアクセスのしやすさ
長期保存性
データは一定期間後にアーカイブまたは削除する必要があるか
認証
ユーザが何者かを確認するセキュリティ要件
ユーザーが自分が主張する人物であることを確認するプロセス
認可
ユーザーがアプリケーション内の特定の機能にのみアクセスできることを保証するセキュリティ要件
認証されたユーザーがアクセスできるリソースや操作を決定するプロセス
合法性
システムがどのような法的制約の中で運用されているか
会社はどのような権利留保を要求しているか
アプリケーションの構築方法やデプロイ方法に関する規制はあるか
プライバシー
従業員から取引を隠せるか
セキュリティ
ユーザーや他の製品、システムが、その種類や権限のレベルに応じて適切なレベルのデータアクセスを行えるよう、ソフトウェアが情報とデータを保護する
具体例
データベース内でデータを暗号化する必要はあるか
社内システム間でネットワーク通信を暗号化する必要はあるか
リモートユーザーのアクセスにはどのような認証が必要か
以下の系統が含まれる
機密性
アクセス権を持つ権限を与えられた者のみがデータにアクセスできること
完全性
ソフトウェアやデータへの不正アクセスや変更を防止されていること
立証性
アクションやイベントの実施を証明できること
責任追跡性
ユーザーのアクションを追跡できること
認証可能性
ユーザーの身元を証明できること
サポート容易性
アプリケーションにはどの程度の技術サポートが必要か
システムエラーをデバッグするには、ログをどのようなレベルで整える必要があるか
ユーザービリティ、達成容易性
ユーザーが意図した目的に対して効率的、効果的、満足に利用できること
以下の項目が含まれる
適切認識可能性
ユーザーが自分のニーズとソフトウェアがあっているか認識できること
学習容易性
ユーザーエラー防止率
アクセシビリティ
その他の(横断的)アーキテクチャ特性
相互運用性
他のシステムとの結合のしやすさ
異なるシステム間での円滑な連携のしやすさ
複数の異なるものを接続したり組み合わせて使用したときに、きちんと全体として正しく動作すること
互換性
情報を交換したり、必要な機能を実行したりしながら、同じハードウェアやソフトウェア環境を共有できる度合い
異なる二つのものが共通の仕様などに対応しており、一方を他方に置き換えても同じように機能すること
以下の項目が含まれる
共存可能性
他の製品と共通の環境や資源を共有しながら、必要な機能を効率的に実行できること
相互運用性
学習容易性
ユーザーがソフトウェアの使用をどれくらい学びやすいか
パフォーマンス効率
ある条件下で使用されるリソース量に対するパフォーマンスの指標
以下の項目が含まれる
時間的挙動
応答時間、処理時間、スループット率の計測
リソース利用率
容量
保守容易性
環境や要求の変化に応じて、開発者がソフトウェアを改良・修正・適応できる効果や効率の度合い
この特性には以下の特性が含まれる
モジュール性
ソフトウェアが離散的なコンポーネントで構成されている度合い
再利用性
開発者がアセットを複数のシステムで使用したり、他のアセットを構築したりできる度合い
分析容易性
開発者がソフトウェアに関する具体的な指標をどれだけ簡単に収集できるか
修正容易性
開発者が欠陥を導入したり、既存の製品の品質を低下させたりすることなくソフトウェアを修正できる度合い
テスト容易性
開発者や他の人がどれだけ簡単にソフトウェアをテストできるか
ソフトウェアを構築する動機
機能適合性
プロダクトやシステムが指定されたニーズや暗黙的なニーズを満たす機能を提供する度合いを表している
以下の特性から構成される
機能的完全性
一連の機能が、特定のタスクとユーザーの目的すべてをカバーしている度合い
機能的正確性
製品やシステムが必要な精度で正しい結果を提供する度合い
機能的妥当性
機能が指定されたタスクや目的の達成を容易にする度合い
まとめ
アプリケーションは一部のアーキテクチャ特性しかサポートできない
アーキテクチャ決定は競合する関心事間のトレードオフに帰着する